threading PriorityQueue 优先级
各个进程读取(in)优先队列是有序的 out 是无序的 (一定要设定保护进程,否则程序无法停止。)
import Queue
import threading
import sys
import time
import random
class Worker(threading.Thread):
''''''
def __init__(self,queue):
threading.Thread.__init__(self)
self.__queue = queue
self.setDaemon(True)
def run(self):
while True:
try :
item = self.__queue.get()
print item , 'in'
time.sleep(random.randint(100,1000)/1000.0)
print item , 'out'
self.__queue.task_done()
except Queue.Empty:
break
queue = Queue.PriorityQueue()
queue.put((20,'second'))
queue.put((10,'first'))
queue.put((30,'third'))
for i in xrange(3):
Worker(queue).start()
queue.put((50,'fifth'))
queue.put((80,'eighth'))
queue.put((70,'seventh'))
queue.put((60,'sixth'))
queue.join()
sys.exit(0)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
(10, 'first') in
(20, 'second') in
(30, 'third') in
(30, 'third') out
(50, 'fifth') in
(20, 'second') out
(60, 'sixth') in
(50, 'fifth') out
(70, 'seventh') in
(10, 'first') out
(80, 'eighth') in
(70, 'seventh') out
(80, 'eighth') out
(60, 'sixth') out